package com.lovely3x.jobservice.factory;

import android.support.annotation.MainThread;

import com.lovely3x.jobservice.JobService;
import com.lovely3x.jobservice.executors.TaskExecutor;
import com.lovely3x.jobservice.serializer.TaskSerializer;
import com.lovely3x.jobservice.task.Task;

/**
 * 任务执行者工厂
 * 用于生成执行者
 * Created by lovely3x on 16-2-2.
 */
public interface ExecutorFactory {

    /**
     * 创建执行者
     *
     * @param task 需要创建执行者的任务对象
     * @return 任务执行者 或 null 如果无法找到该任务的执行者,那么你可以返回null,那么这个任务将会被放弃
     */
    @MainThread
    TaskExecutor createExecutor(Task task);

    /**
     * 获取一个序列化器
     * 一个执行者工厂必须必须提供一个序列化器
     * 来序列化反序列化执行者执行的任务本身和任务进度
     *
     * @return 执行者, 如果你可以提供任务执行者, 那么你就必须提供序列化器,反之则可以不提供
     */
    TaskSerializer getTaskSerializer();

    /**
     * 当前的状态是否繁忙
     * 如果繁忙的话,那么可能就不会继续创建新的执行者
     * 等待下一个执行者执行完毕后再次尝试
     *
     * @return true or false
     */
    @MainThread
    boolean isBusy();

    /**
     * 该工厂，是否支持此任务
     *
     * @param task 任务
     * @return 是否支持
     */
    boolean handleable(Task task);


    /**
     * 当工厂被创建后执行
     *
     * @param service 服务
     */
    @MainThread
    void onCreate(JobService service);


    /**
     * 当工厂即将销毁执行
     *
     * @param service 服务
     */
    @MainThread
    void onDestroy(JobService service);


    @MainThread
    void performOnCreate(TaskExecutor executor);

    @MainThread
    void performOnDestroy(TaskExecutor executor);

}
